# 高斯滤波

# 注：
# 1）随着核大小逐渐变大，会让图像变得更加模糊；
# 2）核大小（N, N）必须是大于1的奇数，如3、5、7等；

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图片
img = cv2.imread('src/lena_noise.png')
source = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 高斯滤波（核大小为3x3）
result = cv2.GaussianBlur(source, (3, 3), 0)  # 可以更改核大小
# 显示图形
titles = ['Source Image', 'GaussianBlur Image (3, 3)']
images = [source, result]
for i in range(2):
    plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

# 高斯滤波（核大小为5x5）
result = cv2.GaussianBlur(source, (5, 5), 0)  # 可以更改核大小
# 显示图形
titles = ['Source Image', 'GaussianBlur Image (5, 5)']
images = [source, result]
for i in range(2):
    plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

# 高斯滤波（核大小为7x7）
result = cv2.GaussianBlur(source, (7, 7), 0)  # 可以更改核大小
# 显示图形
titles = ['Source Image', 'GaussianBlur Image (7, 7)']
images = [source, result]
for i in range(2):
    plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

